/* Periwinkle Reviews theme styles. Built from assets/css/src/*.css — edit the source files, then run docs/build-css.sh. */
/* ==== assets/css/src/base.css ==== */

:root {
  --bg:#f4f4f4; --surface:#ffffff; --ink:#2f4c78; --ink-strong:#2a436b; --ink-muted:#5b6b85; --line:#e3e6eb;
  --deep:#2a436b; --on-deep:#f4f4f4; --on-deep-muted:#c1d4e3;
  --peri:#86ade4; --on-peri:#1e3150;
  --mist:#c1d4e3; --on-mist:#2a436b;
  --lime:#e6fd74; --on-lime:#2a436b;
  --sand:#e7e0d8; --on-sand:#2a436b;
  --glass:rgba(255,255,255,.72);
  --font-sans:Inter, "Helvetica Neue", Arial, sans-serif;
  --font-serif:"Instrument Serif", Georgia, "Times New Roman", serif;
  --r-sm:8px; --r-lg:16px; --r-xl:28px; --pill:999px;
  --ease:cubic-bezier(.2,.8,.2,1);
  color-scheme: light;
}
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) {
    --bg:#121b2c; --surface:#1a2640; --ink:#dfe8f6; --ink-strong:#f1f5fb; --ink-muted:#a3b3cb; --line:#2a3a57;
    --deep:#0c1422; --on-deep:#f1f5fb; --on-deep-muted:#b3c6e0;
    --peri:#86ade4; --on-peri:#132038;
    --mist:#2b3f60; --on-mist:#dfe8f6;
    --lime:#e6fd74; --on-lime:#1b2b47;
    --sand:#2d2925; --on-sand:#efe7dd;
    --glass:rgba(26,38,64,.78);
    color-scheme: dark;
  }
}
:root[data-theme="dark"] {
  --bg:#121b2c; --surface:#1a2640; --ink:#dfe8f6; --ink-strong:#f1f5fb; --ink-muted:#a3b3cb; --line:#2a3a57;
  --deep:#0c1422; --on-deep:#f1f5fb; --on-deep-muted:#b3c6e0;
  --peri:#86ade4; --on-peri:#132038;
  --mist:#2b3f60; --on-mist:#dfe8f6;
  --lime:#e6fd74; --on-lime:#1b2b47;
  --sand:#2d2925; --on-sand:#efe7dd;
  --glass:rgba(26,38,64,.78);
  color-scheme: dark;
}

*, *::before, *::after { box-sizing:border-box; }
html { -webkit-text-size-adjust:100%; }
body { margin:0; background:var(--bg); color:var(--ink); font-family:var(--font-sans); font-size:16px; line-height:1.55; overflow-x:hidden; }
img, svg { max-width:100%; display:block; }
a { color:inherit; }
button, input { font:inherit; color:inherit; }
:focus-visible { outline:2px solid var(--ink); outline-offset:3px; }
.on-deep :focus-visible { outline-color:var(--lime); }
.sr-only { position:absolute; width:1px; height:1px; overflow:hidden; clip:rect(0 0 0 0); white-space:nowrap; }
.wrap { width:min(1180px, 100% - 40px); margin-inline:auto; }
.serif { font-family:var(--font-serif); font-style:italic; font-weight:400; letter-spacing:0; }

/* svg paint classes */
.f-peri{fill:var(--peri)} .f-mist{fill:var(--mist)} .f-lime{fill:var(--lime)} .f-sand{fill:var(--sand)}
.f-deep{fill:#2a436b} .f-white{fill:#ffffff} .f-navy{fill:#2f4c78} .f-orange{fill:#f08a3c} .f-soft{fill:#dbe7f7}
.s-deep{stroke:#2a436b} .s-white{stroke:#ffffff}

/* ---------- cursor ---------- */
.cursor { position:fixed; inset:0; pointer-events:none; z-index:100; display:none; }
.cursor-on .cursor { display:block; }
.cursor-on, .cursor-on a, .cursor-on button, .cursor-on summary { cursor:none; }
.cursor-on input, .cursor-on textarea { cursor:text; }
.cursor-dot, .cursor-ring { position:absolute; left:0; top:0; border-radius:50%; will-change:transform; }
.cursor-dot { width:8px; height:8px; margin:-4px 0 0 -4px; background:var(--ink-strong); transition:opacity .2s, background .2s; }
.cursor-ring { width:40px; height:40px; margin:-20px 0 0 -20px; border:1.5px solid var(--peri); display:grid; place-items:center;
  transition:width .35s var(--ease), height .35s var(--ease), margin .35s var(--ease), background .35s var(--ease), border-color .35s, opacity .2s; }
.cursor-label { font-size:11px; font-weight:600; letter-spacing:.06em; text-transform:uppercase; color:var(--on-lime); opacity:0; transition:opacity .2s; white-space:nowrap; }
.cursor.is-link .cursor-ring { width:64px; height:64px; margin:-32px 0 0 -32px; border-color:var(--ink-strong); }
.cursor.is-label .cursor-ring { width:92px; height:92px; margin:-46px 0 0 -46px; background:var(--lime); border-color:var(--lime); }
.cursor.is-label .cursor-label { opacity:1; }
.cursor.is-label .cursor-dot, .cursor.is-link .cursor-dot { opacity:0; }
.cursor.is-deep .cursor-dot { background:var(--lime); }
.cursor.is-deep .cursor-ring { border-color:var(--lime); }
.cursor.is-hidden .cursor-dot, .cursor.is-hidden .cursor-ring { opacity:0; }
.cursor.is-down .cursor-ring { transform-origin:center; }

/* ---------- buttons, badges ---------- */
.btn { display:inline-flex; align-items:center; gap:10px; min-height:44px; padding:0 14px 0 22px; border-radius:var(--pill); border:1px solid transparent;
  font-size:12px; font-weight:600; letter-spacing:.06em; text-transform:uppercase; text-decoration:none; white-space:nowrap;
  transition:background .25s, border-color .25s, color .25s, transform .45s var(--ease); will-change:transform; }
.btn svg { width:18px; height:18px; flex:none; transition:transform .35s var(--ease); }
.btn:hover svg { transform:translateX(3px); }
.btn-primary { background:var(--ink-strong); color:#fff; }
:root[data-theme="dark"] .btn-primary { background:#dfe8f6; color:#16233a; }
@media (prefers-color-scheme: dark) { :root:not([data-theme="light"]) .btn-primary { background:#dfe8f6; color:#16233a; } }
.btn-primary:hover { background:var(--ink); }
.btn-lime { background:var(--lime); color:var(--on-lime); }
.btn-lime:hover { border-color:var(--on-lime); }
.btn-ghost { background:transparent; color:var(--ink); padding:0 12px; }
.badge { display:inline-block; font-size:11px; line-height:1; font-weight:600; letter-spacing:.04em; padding:7px 10px; border-radius:var(--r-sm); background:var(--mist); color:var(--on-mist); }
.badge-lime { background:var(--lime); color:var(--on-lime); border-radius:var(--pill); }
.magnetic { display:inline-flex; }

/* ---------- nav ---------- */
.nav { position:sticky; top:0; z-index:50; transition:background .3s, box-shadow .3s; }
.nav.is-scrolled { background:var(--glass); backdrop-filter:blur(14px); -webkit-backdrop-filter:blur(14px); box-shadow:0 1px 0 var(--line); }
.nav-in { display:flex; align-items:center; gap:24px; height:72px; }
.logo { font-size:26px; font-weight:500; letter-spacing:-.04em; text-decoration:none; color:var(--ink-strong); display:flex; align-items:baseline; }
.logo em { font-family:var(--font-serif); font-size:30px; letter-spacing:0; }
.nav-links { display:flex; gap:28px; margin-left:auto; margin-right:12px; }
.nav-links a { font-size:13px; font-weight:500; text-decoration:none; color:var(--ink); position:relative; padding:6px 0; }
.nav-links a::after { content:""; position:absolute; left:0; right:0; bottom:0; height:1.5px; background:currentColor; transform:scaleX(0); transform-origin:right; transition:transform .35s var(--ease); }
.nav-links a:hover::after { transform:scaleX(1); transform-origin:left; }
.theme-toggle { width:40px; height:40px; border-radius:50%; border:1px solid var(--line); background:var(--surface); display:grid; place-items:center; }
.theme-toggle svg { width:18px; height:18px; }

/* ---------- hero ---------- */
.hero { padding:40px 0 96px; }
.hero-grid { display:grid; grid-template-columns:1.1fr 1fr; gap:48px; align-items:center; }
.hero h1 { margin:18px 0 26px; font-size:clamp(46px, 6.4vw, 84px); line-height:.98; font-weight:300; letter-spacing:-.035em; color:var(--ink-strong); }
.hero h1 .serif { font-size:1.1em; }
.line-mask { display:block; overflow:hidden; padding-bottom:.06em; }
.line-mask > span { display:inline-block; transform:translateY(105%); animation:rise 1s var(--ease) forwards; }
.line-mask:nth-child(2) > span { animation-delay:.12s; }
.hero-copy .fade-in { opacity:0; animation:fade .8s var(--ease) forwards; animation-delay:.45s; }
.hero-copy .fade-in.d2 { animation-delay:.6s; }
@keyframes rise { to { transform:none; } }
@keyframes fade { to { opacity:1; } }
.checks { list-style:none; padding:0; margin:0 0 34px; display:grid; gap:12px; font-size:15px; }
.checks li { display:flex; align-items:center; gap:12px; }
.check { width:22px; height:22px; border-radius:50%; background:var(--mist); color:var(--on-mist); display:grid; place-items:center; flex:none; }
.check svg { width:12px; height:12px; }

.collage { position:relative; height:620px; display:grid; grid-template-columns:1fr 1fr; gap:16px; align-content:center; }
.col { display:grid; gap:16px; }
.col-b { transform:translateY(56px); }
.tile { position:relative; border-radius:var(--r-xl); overflow:hidden; height:180px; will-change:transform; }
.tile.tall { height:260px; }
.tile-inner { position:absolute; inset:0; display:grid; place-items:center; will-change:transform; }
.tile-inner svg { width:58%; height:auto; }
.t-peri { background:var(--peri); } .t-sand { background:var(--sand); } .t-mist { background:var(--mist); } .t-deep { background:#2a436b; }
.float { animation:float 7s ease-in-out infinite; }
.float.slow { animation-duration:9s; animation-delay:-3s; }
@keyframes float { 50% { translate:0 -8px; } }
.plan-card { width:74%; background:#ffffff; border-radius:18px; padding:16px; display:grid; gap:10px; color:#2a436b; }
.plan-card b { font-size:13px; font-weight:600; }
.plan-bar { height:8px; border-radius:var(--pill); background:#dbe7f7; overflow:hidden; }
.plan-bar i { display:block; height:100%; width:0; background:#86ade4; border-radius:inherit; transition:width 1.4s var(--ease); }
.is-loaded .plan-bar i { width:var(--w); }
.plan-row { display:flex; justify-content:space-between; font-size:11px; color:#5b6b85; }

/* ---------- sections ---------- */
.section { padding:104px 0; }
.sec-head { text-align:center; max-width:760px; margin:0 auto 56px; }
.sec-head h2, .h2 { margin:0; font-size:clamp(34px, 4.2vw, 52px); line-height:1.05; font-weight:300; letter-spacing:-.03em; color:var(--ink-strong); }
.sec-head h2 .serif, .h2 .serif { font-size:1.08em; }
.sec-head p { margin:14px auto 0; color:var(--ink-muted); max-width:52ch; }

/* treatments */
.treat-grid { display:grid; grid-template-columns:repeat(3, 1fr); gap:20px; perspective:1200px; }
.treat { background:var(--surface); border:1px solid var(--line); border-radius:var(--r-xl); padding:12px; display:flex; flex-direction:column; transform-style:preserve-3d; transition:transform .5s var(--ease); will-change:transform; }
.treat-art { position:relative; height:240px; border-radius:20px; display:grid; place-items:center; overflow:hidden; }
.treat-art svg { height:78%; width:auto; transition:transform .5s var(--ease); will-change:transform; }
.treat-art .badge { position:absolute; top:14px; right:14px; }
.treat-body { padding:22px 14px 14px; display:flex; flex-direction:column; gap:8px; flex:1; }
.treat h3 { margin:0; font-size:20px; font-weight:500; letter-spacing:-.01em; color:var(--ink-strong); }
.treat p { margin:0 0 14px; color:var(--ink-muted); font-size:14.5px; }
.treat .btn { justify-content:center; margin-top:auto; }

/* intro split */
.split { display:grid; grid-template-columns:1fr 1fr; gap:48px; align-items:end; }
.split p { margin:0; color:var(--ink-muted); font-size:17px; max-width:48ch; }

/* steps */
.steps { position:relative; }
.steps-track { position:relative; height:2px; background:var(--line); margin:0 0 36px; border-radius:2px; }
.steps-fill { position:absolute; inset:0; background:var(--peri); transform-origin:left; transform:scaleX(0); }
.steps-grid { display:grid; grid-template-columns:repeat(3, 1fr); gap:24px; }
.step { position:relative; border-radius:var(--r-xl); padding:30px; min-height:320px; display:flex; flex-direction:column; overflow:hidden; transition:transform .6s var(--ease), opacity .6s var(--ease); }
.js .step { opacity:.35; transform:translateY(18px); }
.js .step.is-on { opacity:1; transform:none; }
.step:nth-child(1) { background:var(--surface); border:1px solid var(--line); }
.step:nth-child(2) { background:var(--peri); color:var(--on-peri); }
.step:nth-child(3) { background:var(--sand); color:var(--on-sand); }
.step-num { font-family:var(--font-serif); font-style:italic; font-size:88px; line-height:.9; }
.step h3 { margin:auto 0 8px; font-size:24px; font-weight:500; letter-spacing:-.015em; }
.step p { margin:0; font-size:15px; opacity:.9; max-width:34ch; }
.step:nth-child(1) p { color:var(--ink-muted); opacity:1; }
.step-dot { position:absolute; top:-45px; left:30px; width:14px; height:14px; border-radius:50%; background:var(--bg); border:2px solid var(--line); transition:background .4s, border-color .4s; }
.step.is-on .step-dot { background:var(--peri); border-color:var(--peri); }
.steps-grid { position:relative; }

/* why */
.why-grid { display:grid; grid-template-columns:repeat(3, 1fr); gap:20px; }
.why { background:var(--surface); border:1px solid var(--line); border-radius:var(--r-xl); padding:30px; display:flex; flex-direction:column; gap:10px; overflow:hidden; position:relative; }
.why h3 { margin:0; font-size:22px; line-height:1.15; font-weight:400; letter-spacing:-.015em; color:var(--ink-strong); }
.why h3 b { font-weight:600; }
.why p { margin:0; color:var(--ink-muted); font-size:14.5px; }
.why-art { height:170px; display:grid; place-items:center; margin:12px 0 6px; }
.chat { width:100%; max-width:260px; display:grid; gap:8px; }
.bubble { font-size:12px; padding:9px 12px; border-radius:14px; width:fit-content; max-width:85%; }
.bubble.me { justify-self:end; background:var(--mist); color:var(--on-mist); border-bottom-right-radius:4px; }
.bubble.dr { background:var(--bg); color:var(--ink); border:1px solid var(--line); border-bottom-left-radius:4px; }
.typing { display:inline-flex; gap:4px; padding:12px; }
.typing i { width:6px; height:6px; border-radius:50%; background:var(--ink-muted); animation:blink 1.2s infinite; }
.typing i:nth-child(2) { animation-delay:.15s; } .typing i:nth-child(3) { animation-delay:.3s; }
@keyframes blink { 0%,60%,100% { opacity:.25; } 30% { opacity:1; } }
.pulse-ring { position:relative; width:128px; height:128px; border-radius:50%; background:var(--mist); display:grid; place-items:center; }
.pulse-ring::before, .pulse-ring::after { content:""; position:absolute; inset:0; border-radius:50%; border:1.5px solid var(--peri); animation:pulse 3s var(--ease) infinite; }
.pulse-ring::after { animation-delay:1.5s; }
@keyframes pulse { from { transform:scale(1); opacity:.9; } to { transform:scale(1.45); opacity:0; } }
.pulse-ring svg { width:56px; height:56px; }

/* banner */
.banner { position:relative; background:var(--peri); color:var(--on-peri); border-radius:36px; padding:clamp(40px, 6vw, 76px); display:grid; grid-template-columns:1.1fr 1fr; gap:24px; align-items:center; overflow:hidden; min-height:460px; }
.banner h2 { margin:0 0 18px; font-size:clamp(40px, 5.2vw, 68px); line-height:1; font-weight:300; letter-spacing:-.035em; }
.banner p { margin:0 0 30px; font-size:17px; max-width:40ch; }
.banner .btn-primary { background:#2a436b; color:#fff; }
.banner-art { position:relative; height:380px; }
.banner-art .bottle { position:absolute; right:12%; top:10%; height:78%; width:auto; will-change:transform; }
.banner-art .vial { position:absolute; left:6%; bottom:4%; height:52%; width:auto; will-change:transform; }
.banner-art .pill { position:absolute; width:46px; height:46px; will-change:transform; }

/* faq */
.faq { max-width:820px; margin:0 auto; display:grid; gap:10px; }
.faq-item { background:var(--surface); border:1px solid var(--line); border-radius:var(--r-lg); overflow:hidden; }
.faq-q { width:100%; display:flex; align-items:center; justify-content:space-between; gap:16px; padding:20px 24px; background:none; border:0; text-align:left; font-size:15px; font-weight:500; color:var(--ink-strong); }
.faq-icon { width:28px; height:28px; border-radius:50%; background:var(--bg); display:grid; place-items:center; flex:none; transition:transform .45s var(--ease), background .3s; }
.faq-icon svg { width:12px; height:12px; }
.faq-item.is-open .faq-icon { transform:rotate(135deg); background:var(--lime); color:var(--on-lime); }
.faq-a { display:grid; grid-template-rows:0fr; transition:grid-template-rows .45s var(--ease); }
.faq-item.is-open .faq-a { grid-template-rows:1fr; }
.faq-a > div { overflow:hidden; }
.faq-a p { margin:0; padding:0 24px 22px; color:var(--ink-muted); font-size:15px; max-width:66ch; }

/* trio */
.trio { display:grid; grid-template-columns:repeat(3, 1fr); gap:20px; }
.trio-card { border-radius:var(--r-xl); padding:24px; min-height:360px; display:flex; flex-direction:column; gap:12px; position:relative; overflow:hidden; }
.trio-card:nth-child(1) { background:var(--sand); color:var(--on-sand); }
.trio-card:nth-child(2) { background:var(--surface); border:1px solid var(--line); color:var(--ink); }
.trio-card:nth-child(3) { background:var(--peri); color:var(--on-peri); }
.trio-card p { margin:0; font-size:15px; max-width:30ch; }
.trio-art { margin-top:auto; height:190px; display:grid; place-items:center; }
.trio-art svg { height:100%; width:auto; }
.box-lid { transform-origin:30% 100%; transition:transform .6s var(--ease); }
.trio-card:hover .box-lid { transform:rotate(-14deg) translateY(-6px); }

/* cta */
.cta { position:relative; background:#2a436b; color:#f4f4f4; border-radius:36px; padding:clamp(48px, 7vw, 96px); overflow:hidden; min-height:440px; display:flex; flex-direction:column; justify-content:center; }
:root[data-theme="dark"] .cta { background:#0c1422; }
@media (prefers-color-scheme: dark) { :root:not([data-theme="light"]) .cta { background:#0c1422; } }
.cta h2 { position:relative; margin:0 0 30px; font-size:clamp(42px, 6vw, 80px); line-height:.98; font-weight:300; letter-spacing:-.035em; max-width:12ch; z-index:1; }
.cta h2 .serif { color:var(--lime); }
.cta .btn { position:relative; z-index:1; }
.orb { position:absolute; border-radius:50%; will-change:transform; }
.orb-1 { width:380px; height:380px; right:-80px; top:-120px; background:var(--peri); }
.orb-2 { width:220px; height:220px; right:220px; bottom:-90px; background:var(--sand); }
.orb-3 { width:120px; height:56px; right:120px; bottom:120px; border-radius:var(--pill); background:var(--lime); }

/* footer */
.footer { background:#2a436b; color:#f4f4f4; margin-top:104px; padding:72px 0 28px; overflow:hidden; }
:root[data-theme="dark"] .footer { background:#0c1422; }
@media (prefers-color-scheme: dark) { :root:not([data-theme="light"]) .footer { background:#0c1422; } }
.wordmark { display:flex; justify-content:flex-start; font-size:clamp(76px, 17vw, 236px); line-height:.9; font-weight:500; letter-spacing:-.06em; color:var(--lime); margin:0 0 56px; user-select:none; }
.wordmark span { display:inline-block; will-change:transform; transition:transform .5s var(--ease); }
.wordmark span.serif { font-weight:400; letter-spacing:0; }
.foot-grid { display:grid; grid-template-columns:repeat(3, auto) 1fr; gap:48px; }
.foot-grid h4 { margin:0 0 12px; font-size:12px; font-weight:500; color:#c1d4e3; }
.foot-grid ul { list-style:none; margin:0; padding:0; display:grid; gap:8px; font-size:14px; }
.foot-grid a { text-decoration:none; }
.foot-grid a:hover { text-decoration:underline; text-underline-offset:3px; }
.news { justify-self:end; max-width:380px; }
.news h3 { margin:0 0 18px; font-size:24px; font-weight:300; letter-spacing:-.02em; line-height:1.2; }
.news form { display:flex; align-items:center; border-bottom:1px solid #c1d4e3; padding-bottom:8px; }
.news input { flex:1; background:transparent; border:0; color:#f4f4f4; padding:8px 0; outline:none; min-width:0; }
.news input::placeholder { color:#c1d4e3; }
.news button { width:40px; height:40px; border-radius:50%; background:var(--lime); color:#2a436b; border:0; display:grid; place-items:center; flex:none; }
.news button svg { width:16px; height:16px; }
.news-msg { min-height:20px; margin:10px 0 0; font-size:13px; color:#c1d4e3; }
.news-msg.is-error { color:#ffc9b8; }
.legal { margin-top:56px; padding-top:22px; border-top:1px solid rgba(193,212,227,.25); font-size:12px; color:#c1d4e3; display:flex; flex-wrap:wrap; justify-content:space-between; gap:12px; }

/* reveals (a few, deliberate) */
.js .reveal { opacity:0; transform:translateY(24px); transition:opacity .9s var(--ease), transform .9s var(--ease); }
.js .reveal.is-in { opacity:1; transform:none; }

/* responsive */
@media (max-width: 960px) {
  .hero-grid, .split, .banner { grid-template-columns:1fr; }
  .collage { height:auto; }
  .col-b { transform:translateY(32px); }
  .treat-grid, .steps-grid, .why-grid, .trio { grid-template-columns:1fr; }
  .steps-track, .step-dot { display:none; }
  .foot-grid { grid-template-columns:repeat(3, 1fr); }
  .news { grid-column:1 / -1; justify-self:start; }
  .banner-art { height:300px; }
}
@media (max-width: 720px) {
  .nav-links, .nav-login { display:none; }
  .nav-links + * { margin-left:auto; }
  .section { padding:72px 0; }
  .tile { height:140px; } .tile.tall { height:200px; }
  .foot-grid { grid-template-columns:1fr 1fr; }
}
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation-duration:.001ms !important; animation-iteration-count:1 !important; transition-duration:.001ms !important; }
  .line-mask > span { transform:none; }
  .hero-copy .fade-in { opacity:1; }
  .js .reveal, .js .step { opacity:1; transform:none; }
}

/* ---------- accessibility and interaction polish ---------- */
:where(a,button,input,select,textarea,summary):focus-visible { outline:3px solid var(--peri); outline-offset:3px; }
html { scroll-behavior:smooth; scroll-padding-top:88px; }
body.menu-is-open { overflow:hidden; }
::selection { background:var(--peri); color:var(--ink-strong); }

/* Prevent horizontal overflow from long affiliate URLs, comparison tables and embeds. */
img,svg,video,iframe { max-width:100%; }
pre,code { overflow-wrap:anywhere; }
.table-scroll, .comparison-table-wrap { overflow-x:auto; -webkit-overflow-scrolling:touch; }

/* More deliberate card motion; transform is disabled by reduced-motion below. */
.card, .deal-card, .rank-card, .video-card, .cat-tile { transition:transform .35s var(--ease), box-shadow .35s var(--ease), border-color .35s var(--ease); }
@media (hover:hover) and (pointer:fine) {
  .card:hover, .deal-card:hover, .rank-card:hover, .video-card:hover, .cat-tile:hover { transform:translateY(-4px); box-shadow:0 14px 40px rgba(22,35,58,.08); }
}

/* Mobile menu backdrop and safer tap targets. */
.menu-backdrop { position:fixed; inset:0; z-index:48; background:rgba(22,35,58,.38); opacity:0; pointer-events:none; transition:opacity .25s ease; }
.menu-open .menu-backdrop { opacity:1; pointer-events:auto; }
.menu-btn { min-width:44px; min-height:44px; }
.theme-toggle, .nav-login { min-width:44px; min-height:44px; }

/* Tables stay usable on narrow screens instead of forcing page overflow. */
.comparison-table { min-width:640px; }

/* Sticky mobile action used by affiliate/deal components. */
.pwr-mobile-cta { display:none; }
@media (max-width:720px) {
  .pwr-mobile-cta { position:fixed; left:12px; right:12px; bottom:12px; z-index:45; display:flex; gap:10px; align-items:center; padding:10px; background:var(--surface); background:color-mix(in srgb, var(--surface) 92%, transparent); border:1px solid var(--line); border-radius:16px; box-shadow:0 14px 42px rgba(22,35,58,.16); backdrop-filter:blur(12px); }
  .pwr-mobile-cta .btn { flex:1; justify-content:center; }
}

@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior:auto; }
  *, *::before, *::after { animation-duration:.01ms !important; animation-iteration-count:1 !important; transition-duration:.01ms !important; scroll-behavior:auto !important; }
  .card:hover, .deal-card:hover, .rank-card:hover, .video-card:hover, .cat-tile:hover { transform:none; box-shadow:none; }
}
/* ==== assets/css/src/pages.css ==== */

/* ================= site chrome ================= */
.view { display:none; }
.view.is-active { display:block; }
.view > .section:first-child { padding-top:48px; }
.text-link { color:var(--ink-strong); font-weight:500; text-decoration:underline; text-decoration-thickness:1px; text-underline-offset:4px; }
.text-link:hover { text-decoration-thickness:2px; }

.curtain { position:fixed; inset:0; z-index:90; pointer-events:none; display:grid; place-items:center; background:var(--peri); transform:translateY(100%); }
.curtain .logo { color:#1e3150; font-size:44px; }
.curtain .logo em { font-size:52px; }
.curtain.is-covering { transition:transform .5s cubic-bezier(.7,0,.3,1); transform:translateY(0); }
.curtain.is-revealing { transition:transform .6s cubic-bezier(.7,0,.3,1); transform:translateY(-100%); }

.read-progress { position:fixed; left:0; right:0; top:0; height:3px; z-index:60; background:var(--lime); transform-origin:left; transform:scaleX(0); display:none; }
.read-progress.is-on { display:block; }

/* dropdown nav */
.nav-links { align-items:center; }
.nav-item { position:relative; }
.nav-trigger { display:inline-flex; align-items:center; gap:6px; background:none; border:0; padding:6px 0; font-size:13px; font-weight:500; color:var(--ink); }
.nav-trigger svg { width:10px; height:10px; transition:transform .3s var(--ease); }
.nav-item.is-open .nav-trigger svg { transform:rotate(180deg); }
.nav-panel { position:absolute; top:calc(100% + 14px); left:50%; min-width:340px; padding:10px; background:var(--surface); border:1px solid var(--line); border-radius:20px; box-shadow:0 18px 40px rgba(20,34,58,.12);
  opacity:0; visibility:hidden; transform:translate(-50%, 8px); transition:opacity .25s, transform .35s var(--ease), visibility 0s .35s; display:grid; gap:2px; }
.nav-panel::before { content:""; position:absolute; left:0; right:0; top:-16px; height:16px; }
.nav-item.is-open .nav-panel { opacity:1; visibility:visible; transform:translate(-50%, 0); transition:opacity .25s, transform .35s var(--ease); }
.nav-panel a { display:flex; align-items:center; gap:14px; padding:10px 12px; border-radius:12px; text-decoration:none; }
.nav-panel a::after { display:none; }
.nav-panel a:hover, .nav-panel a:focus-visible { background:var(--bg); }
.nav-panel .np-icon { width:40px; height:40px; border-radius:12px; display:grid; place-items:center; flex:none; }
.nav-panel .np-icon svg { height:30px; width:auto; }
.nav-panel b { display:block; font-size:14px; font-weight:500; color:var(--ink-strong); }
.nav-panel small { display:block; font-size:12px; color:var(--ink-muted); }
.nav-links a[aria-current="page"], .nav-trigger.is-current { color:var(--ink-strong); }
.nav-links > a[aria-current="page"]::after { transform:scaleX(1); }

.menu-btn { display:none; width:44px; height:44px; border-radius:50%; border:1px solid var(--line); background:var(--surface); place-items:center; }
.menu-btn span { display:block; width:16px; height:1.5px; background:var(--ink-strong); position:relative; transition:background .2s; }
.menu-btn span::before, .menu-btn span::after { content:""; position:absolute; left:0; width:16px; height:1.5px; background:var(--ink-strong); transition:transform .35s var(--ease); }
.menu-btn span::before { top:-5px; } .menu-btn span::after { top:5px; }
.menu-open .menu-btn span { background:transparent; }
.menu-open .menu-btn span::before { transform:translateY(5px) rotate(45deg); }
.menu-open .menu-btn span::after { transform:translateY(-5px) rotate(-45deg); }
.mobile-menu { position:fixed; inset:72px 0 0; z-index:49; background:var(--bg); padding:24px 20px 40px; overflow:auto; display:none; }
.menu-open .mobile-menu { display:block; }
.mobile-menu a { display:block; text-decoration:none; font-size:30px; font-weight:300; letter-spacing:-.02em; padding:10px 0; border-bottom:1px solid var(--line); color:var(--ink-strong); opacity:0; transform:translateY(12px); animation:menuIn .5s var(--ease) forwards; }
.mobile-menu a:nth-child(2){animation-delay:.04s} .mobile-menu a:nth-child(3){animation-delay:.08s} .mobile-menu a:nth-child(4){animation-delay:.12s} .mobile-menu a:nth-child(5){animation-delay:.16s} .mobile-menu a:nth-child(6){animation-delay:.2s} .mobile-menu a:nth-child(7){animation-delay:.24s} .mobile-menu a:nth-child(8){animation-delay:.28s}
.mobile-menu .btn { margin-top:24px; font-size:13px; opacity:1; transform:none; animation:none; border:0; }
@keyframes menuIn { to { opacity:1; transform:none; } }

/* ================= shared page parts ================= */
.page-hero { padding:56px 0 64px; }
.page-hero .wrap { max-width:1180px; }
.page-hero h1 { margin:14px 0 18px; font-size:clamp(44px, 6vw, 80px); line-height:1; font-weight:300; letter-spacing:-.035em; color:var(--ink-strong); max-width:16ch; }
.page-hero h1 .serif { font-size:1.08em; }
.page-hero p.lead { margin:0; font-size:18px; color:var(--ink-muted); max-width:56ch; }
.page-hero.center { text-align:center; }
.page-hero.center h1, .page-hero.center p.lead { margin-left:auto; margin-right:auto; }
.crumbs { display:flex; flex-wrap:wrap; gap:8px; font-size:13px; color:var(--ink-muted); }
.crumbs a { color:var(--ink-muted); text-decoration:none; }
.crumbs a:hover { color:var(--ink-strong); text-decoration:underline; }
.h1-mask { display:block; overflow:hidden; }
.js .view.is-entering .h1-mask > span { display:inline-block; animation:rise .9s var(--ease) both; }

.chips { display:flex; flex-wrap:wrap; gap:8px; }
.chip { min-height:38px; padding:0 16px; border-radius:var(--pill); border:1px solid var(--line); background:var(--surface); font-size:13px; font-weight:500; color:var(--ink); transition:background .25s, color .25s, border-color .25s; }
.chip:hover { border-color:var(--ink-muted); }
.chip[aria-pressed="true"] { background:var(--ink-strong); color:#fff; border-color:var(--ink-strong); }
:root[data-theme="dark"] .chip[aria-pressed="true"] { background:#dfe8f6; color:#16233a; border-color:#dfe8f6; }
@media (prefers-color-scheme: dark) { :root:not([data-theme="light"]) .chip[aria-pressed="true"] { background:#dfe8f6; color:#16233a; border-color:#dfe8f6; } }
.is-filtered-out { display:none !important; }
.pop-in { animation:popIn .45s var(--ease) both; }
@keyframes popIn { from { opacity:0; transform:translateY(10px) scale(.98); } }

.card { background:var(--surface); border:1px solid var(--line); border-radius:var(--r-xl); padding:28px; }
.card h3 { margin:0 0 8px; font-size:20px; font-weight:500; letter-spacing:-.01em; color:var(--ink-strong); }
.card p { margin:0; color:var(--ink-muted); font-size:15px; }
.grid-2 { display:grid; grid-template-columns:repeat(2, 1fr); gap:20px; }
.grid-3 { display:grid; grid-template-columns:repeat(3, 1fr); gap:20px; }
.grid-4 { display:grid; grid-template-columns:repeat(4, 1fr); gap:20px; }
.muted { color:var(--ink-muted); }
.note { font-size:13px; color:var(--ink-muted); }
.placeholder { background:var(--mist); color:var(--on-mist); border-radius:6px; padding:0 6px; }
.notice { display:flex; gap:12px; align-items:flex-start; padding:16px 18px; border-radius:var(--r-lg); background:var(--sand); color:var(--on-sand); font-size:14px; }
.notice svg { width:20px; height:20px; flex:none; margin-top:1px; }

/* comparison table */
.table-wrap { overflow-x:auto; border:1px solid var(--line); border-radius:var(--r-xl); background:var(--surface); }
.compare { width:100%; min-width:720px; border-collapse:collapse; font-size:15px; }
.compare th, .compare td { text-align:left; padding:18px 22px; border-bottom:1px solid var(--line); vertical-align:top; }
.compare thead th { font-size:14px; font-weight:600; color:var(--ink-strong); background:var(--bg); }
.compare tbody th { font-weight:500; color:var(--ink-strong); width:24%; }
.compare td { color:var(--ink-muted); }
.compare tr:last-child th, .compare tr:last-child td { border-bottom:0; }

/* treatment detail */
.detail-hero { display:grid; grid-template-columns:1fr 1fr; gap:56px; align-items:center; padding:24px 0 80px; }
.detail-art { position:relative; aspect-ratio:1 / 1; border-radius:36px; overflow:hidden; display:grid; place-items:center; }
.detail-art .main-obj { height:62%; width:auto; will-change:transform; }
.detail-art .orbit { position:absolute; will-change:transform; }
.detail-info h1 { margin:14px 0 16px; font-size:clamp(40px, 5vw, 64px); line-height:1; font-weight:300; letter-spacing:-.035em; color:var(--ink-strong); }
.detail-info .lead { font-size:17px; color:var(--ink-muted); margin:0 0 24px; max-width:48ch; }
.price-line { display:flex; align-items:baseline; gap:10px; margin:24px 0; }
.price-line strong { font-size:40px; font-weight:300; letter-spacing:-.03em; color:var(--ink-strong); }
.fit-list { list-style:none; margin:0; padding:0; display:grid; gap:12px; }
.fit-list li { display:flex; gap:12px; align-items:flex-start; font-size:15px; color:var(--ink); }
.fit-list .check { margin-top:1px; }
.fit-list .dash { width:22px; height:22px; border-radius:50%; background:var(--sand); color:var(--on-sand); display:grid; place-items:center; flex:none; font-weight:600; }
.timeline { position:relative; display:grid; gap:18px; padding-left:34px; }
.timeline::before { content:""; position:absolute; left:10px; top:6px; bottom:6px; width:2px; background:var(--line); }
.timeline-fill { position:absolute; left:10px; top:6px; width:2px; height:0; background:var(--peri); }
.tl-item { position:relative; }
.tl-item::before { content:""; position:absolute; left:-30px; top:6px; width:14px; height:14px; border-radius:50%; background:var(--bg); border:2px solid var(--line); transition:background .3s, border-color .3s; }
.tl-item.is-on::before { background:var(--peri); border-color:var(--peri); }
.tl-item h4 { margin:0 0 4px; font-size:17px; font-weight:500; color:var(--ink-strong); }
.tl-item p { margin:0; color:var(--ink-muted); font-size:15px; }

/* how it works story */
.story { display:grid; grid-template-columns:1fr 1fr; gap:64px; align-items:start; }
.story-visual { position:sticky; top:110px; height:min(640px, calc(100vh - 150px)); border-radius:36px; background:var(--peri); display:grid; place-items:center; overflow:hidden; }
.phone { width:280px; height:540px; max-height:92%; border-radius:40px; background:#1e3150; padding:12px; position:relative; will-change:transform; }
.phone-screen { position:absolute; inset:12px; border-radius:30px; background:#ffffff; padding:26px 20px; color:#2a436b; display:flex; flex-direction:column; gap:12px; opacity:0; transform:translateY(16px) scale(.98); transition:opacity .5s var(--ease), transform .5s var(--ease); }
.phone-screen.is-on { opacity:1; transform:none; }
.phone-screen b { font-size:18px; font-weight:500; letter-spacing:-.01em; }
.ps-opt { border:1px solid #e3e6eb; border-radius:14px; padding:12px 14px; font-size:13px; display:flex; justify-content:space-between; align-items:center; }
.ps-opt.sel { border-color:#2a436b; background:#eef3fb; }
.ps-dot { width:14px; height:14px; border-radius:50%; border:1.5px solid #2a436b; }
.ps-opt.sel .ps-dot { background:#2a436b; box-shadow:inset 0 0 0 3px #eef3fb; }
.ps-btn { margin-top:auto; background:#e6fd74; color:#2a436b; border-radius:999px; text-align:center; padding:12px; font-size:12px; font-weight:600; letter-spacing:.06em; }
.ps-avatar { width:52px; height:52px; border-radius:50%; background:#c1d4e3; display:grid; place-items:center; font-weight:600; }
.ps-track { display:grid; gap:14px; margin-top:8px; }
.ps-track div { display:flex; gap:10px; align-items:center; font-size:13px; }
.ps-track i { width:12px; height:12px; border-radius:50%; background:#86ade4; flex:none; }
.ps-track i.off { background:#e3e6eb; }
.story-steps { display:grid; gap:0; }
.story-step { min-height:70vh; display:flex; flex-direction:column; justify-content:center; opacity:.3; transition:opacity .5s var(--ease); }
.story-step.is-on { opacity:1; }
.story-step .step-num { font-family:var(--font-serif); font-style:italic; font-size:72px; line-height:1; color:var(--ink-strong); }
.story-step h2 { margin:10px 0 12px; font-size:clamp(30px, 3.4vw, 44px); line-height:1.05; font-weight:300; letter-spacing:-.03em; color:var(--ink-strong); }
.story-step p { margin:0; font-size:17px; color:var(--ink-muted); max-width:44ch; }

/* about */
.statement { font-size:clamp(30px, 4vw, 52px); line-height:1.12; font-weight:300; letter-spacing:-.03em; color:var(--ink-strong); max-width:22ch; margin:0; }
.stat { border-top:1px solid var(--line); padding-top:18px; }
.stat strong { display:block; font-size:clamp(40px, 5vw, 64px); font-weight:300; letter-spacing:-.04em; color:var(--ink-strong); line-height:1; }
.stat span { font-size:14px; color:var(--ink-muted); }
.value-card { border-radius:var(--r-xl); padding:30px; min-height:260px; display:flex; flex-direction:column; justify-content:space-between; }
.value-card h3 { margin:0; font-size:26px; font-weight:300; letter-spacing:-.02em; }
.value-card p { margin:0; font-size:15px; }

/* doctors */
.doc-card { perspective:1000px; min-height:340px; background:none; border:0; padding:0; text-align:left; width:100%; }
.doc-inner { position:relative; height:100%; min-height:340px; transform-style:preserve-3d; transition:transform .8s var(--ease); }
.doc-card:hover .doc-inner, .doc-card:focus-visible .doc-inner, .doc-card.is-flipped .doc-inner { transform:rotateY(180deg); }
.doc-face { position:absolute; inset:0; border-radius:var(--r-xl); padding:26px; backface-visibility:hidden; -webkit-backface-visibility:hidden; display:flex; flex-direction:column; }
.doc-front { background:var(--surface); border:1px solid var(--line); }
.doc-back { background:#2a436b; color:#f4f4f4; transform:rotateY(180deg); justify-content:space-between; }
.doc-avatar { width:100%; flex:1; border-radius:20px; display:grid; place-items:center; font-size:44px; font-weight:300; letter-spacing:-.02em; margin-bottom:18px; }
.doc-front h3 { margin:0; font-size:18px; font-weight:500; color:var(--ink-strong); }
.doc-front p { margin:2px 0 0; font-size:14px; color:var(--ink-muted); }
.doc-back p { margin:0; font-size:15px; color:#dfe8f6; }
.doc-back ul { list-style:none; margin:0; padding:0; display:grid; gap:8px; font-size:14px; color:#c1d4e3; }

/* reviews */
.rating-row { display:flex; flex-wrap:wrap; gap:32px; align-items:center; }
.stars { display:flex; gap:4px; color:var(--ink-strong); }
.stars svg { width:22px; height:22px; }
.masonry { columns:3 300px; column-gap:20px; }
.review { break-inside:avoid; margin:0 0 20px; background:var(--surface); border:1px solid var(--line); border-radius:var(--r-xl); padding:26px; display:grid; gap:14px; }
.review:nth-child(4n+2) { background:var(--sand); color:var(--on-sand); border-color:transparent; }
.review:nth-child(4n+3) { background:var(--peri); color:var(--on-peri); border-color:transparent; }
.review blockquote { margin:0; font-size:17px; line-height:1.5; }
.review footer { display:flex; align-items:center; gap:12px; font-size:13px; }
.review .ava { width:36px; height:36px; border-radius:50%; background:var(--mist); color:var(--on-mist); display:grid; place-items:center; font-weight:600; font-size:13px; }
.review:nth-child(4n+3) .ava { background:#ffffff; color:#2a436b; }

/* journal */
.featured { display:grid; grid-template-columns:1.2fr 1fr; gap:0; border-radius:36px; overflow:hidden; background:var(--surface); border:1px solid var(--line); text-decoration:none; }
.featured-art, .post-art { display:grid; place-items:center; position:relative; overflow:hidden; }
.featured-art { min-height:380px; }
.featured-art svg, .post-art svg { height:60%; width:auto; transition:transform .7s var(--ease); }
.featured:hover .featured-art svg, .post:hover .post-art svg { transform:scale(1.06) rotate(-4deg); }
.featured-body { padding:40px; display:flex; flex-direction:column; justify-content:center; gap:14px; }
.featured-body h2 { margin:0; font-size:clamp(28px, 3vw, 40px); line-height:1.08; font-weight:300; letter-spacing:-.03em; color:var(--ink-strong); }
.post { text-decoration:none; display:flex; flex-direction:column; border-radius:var(--r-xl); overflow:hidden; background:var(--surface); border:1px solid var(--line); }
.post-art { height:220px; }
.post-body { padding:22px 24px 26px; display:grid; gap:8px; }
.post-body h3 { margin:0; font-size:20px; line-height:1.2; font-weight:500; letter-spacing:-.01em; color:var(--ink-strong); }
.meta { font-size:13px; color:var(--ink-muted); }
.article { max-width:720px; margin:0 auto; }
.article h1 { margin:16px 0 18px; font-size:clamp(38px, 5vw, 64px); line-height:1.02; font-weight:300; letter-spacing:-.035em; color:var(--ink-strong); }
.article-art { height:360px; border-radius:36px; display:grid; place-items:center; margin:36px 0 44px; overflow:hidden; }
.article-art svg { height:62%; width:auto; }
.prose { font-size:18px; line-height:1.72; color:var(--ink); }
.prose h2 { font-size:28px; font-weight:400; letter-spacing:-.02em; line-height:1.2; color:var(--ink-strong); margin:44px 0 12px; }
.prose p { margin:0 0 20px; }
.prose ul { margin:0 0 20px; padding-left:22px; }
.prose li { margin-bottom:8px; }
.prose blockquote { margin:32px 0; padding:0; font-family:var(--font-serif); font-style:italic; font-size:32px; line-height:1.25; color:var(--ink-strong); }

/* faq page */
.faq-tools { display:flex; flex-wrap:wrap; gap:16px; align-items:center; justify-content:space-between; max-width:820px; margin:0 auto 28px; }
.search { position:relative; flex:1; min-width:240px; }
.search svg { position:absolute; left:16px; top:50%; width:18px; height:18px; transform:translateY(-50%); color:var(--ink-muted); }
.search input { width:100%; height:48px; border-radius:var(--pill); border:1px solid var(--line); background:var(--surface); padding:0 18px 0 44px; font-size:15px; color:var(--ink); }
.search input:focus { outline:2px solid var(--ink); outline-offset:2px; }
.empty { max-width:820px; margin:0 auto; text-align:center; padding:40px; border:1px dashed var(--line); border-radius:var(--r-xl); color:var(--ink-muted); }

/* pricing */
.billing { display:inline-grid; grid-template-columns:1fr 1fr; position:relative; padding:4px; border-radius:var(--pill); background:var(--surface); border:1px solid var(--line); }
.billing button { position:relative; z-index:1; min-height:40px; padding:0 20px; border:0; background:none; border-radius:var(--pill); font-size:13px; font-weight:500; color:var(--ink); transition:color .3s; }
.billing button[aria-pressed="true"] { color:var(--on-lime); }
.billing-thumb { position:absolute; top:4px; bottom:4px; left:4px; width:calc(50% - 4px); border-radius:var(--pill); background:var(--lime); transition:transform .45s var(--ease); }
.billing.is-quarterly .billing-thumb { transform:translateX(100%); }
.plan { position:relative; display:flex; flex-direction:column; gap:14px; border-radius:var(--r-xl); padding:32px; background:var(--surface); border:1px solid var(--line); }
.plan.featured-plan { background:#2a436b; color:#f4f4f4; border-color:#2a436b; }
.plan.featured-plan .muted { color:#c1d4e3; }
.plan h3 { margin:0; font-size:22px; font-weight:500; }
.plan .amount { font-size:52px; font-weight:300; letter-spacing:-.04em; line-height:1; }
.plan .amount small { font-size:15px; letter-spacing:0; font-weight:400; }
.plan ul { list-style:none; margin:8px 0 18px; padding:0; display:grid; gap:10px; font-size:14.5px; }
.plan li { display:flex; gap:10px; align-items:flex-start; }
.plan .btn { margin-top:auto; justify-content:center; }
.plan .badge { position:absolute; top:24px; right:24px; }
.flip-num { display:inline-block; }
.flip-num.is-flipping { animation:flip .5s var(--ease); }
@keyframes flip { 0% { transform:none; opacity:1; } 45% { transform:translateY(-40%); opacity:0; } 55% { transform:translateY(40%); opacity:0; } 100% { transform:none; opacity:1; } }

/* forms */
.field { display:grid; gap:8px; }
.field label, .field legend { font-size:14px; font-weight:500; color:var(--ink-strong); }
.input { width:100%; min-height:50px; border-radius:14px; border:1px solid var(--line); background:var(--surface); padding:0 16px; font-size:15px; color:var(--ink); transition:border-color .2s; }
textarea.input { min-height:130px; padding:14px 16px; resize:vertical; }
select.input { appearance:none; background-image:linear-gradient(45deg, transparent 50%, currentColor 50%), linear-gradient(135deg, currentColor 50%, transparent 50%); background-position:calc(100% - 22px) 50%, calc(100% - 16px) 50%; background-size:6px 6px; background-repeat:no-repeat; }
.input:focus { outline:2px solid var(--ink); outline-offset:1px; border-color:transparent; }
.input[aria-invalid="true"] { border-color:#b3261e; }
.err { min-height:18px; font-size:13px; color:#b3261e; margin:0; }
:root[data-theme="dark"] .err { color:#ffb4a8; }
@media (prefers-color-scheme: dark) { :root:not([data-theme="light"]) .err { color:#ffb4a8; } }
.pw-wrap { position:relative; }
.pw-toggle { position:absolute; right:8px; top:50%; transform:translateY(-50%); min-height:36px; padding:0 12px; border-radius:10px; border:0; background:var(--bg); font-size:12px; font-weight:600; color:var(--ink); }
.form-status { font-size:14px; padding:12px 14px; border-radius:12px; background:var(--mist); color:var(--on-mist); display:none; }
.form-status.is-on { display:block; animation:popIn .4s var(--ease); }

/* quiz */
.quiz-shell { max-width:760px; margin:0 auto; }
.quiz-top { display:flex; align-items:center; justify-content:space-between; gap:16px; margin-bottom:14px; font-size:13px; color:var(--ink-muted); }
.quiz-bar { height:6px; border-radius:var(--pill); background:var(--line); overflow:hidden; margin-bottom:40px; }
.quiz-bar i { display:block; height:100%; width:0; background:var(--peri); border-radius:inherit; transition:width .6s var(--ease); }
.quiz-card { background:var(--surface); border:1px solid var(--line); border-radius:36px; padding:clamp(28px, 5vw, 52px); overflow:hidden; }
.quiz-step { animation:slideIn .5s var(--ease) both; }
.quiz-step.back { animation-name:slideInBack; }
@keyframes slideIn { from { opacity:0; transform:translateX(40px); } }
@keyframes slideInBack { from { opacity:0; transform:translateX(-40px); } }
.quiz-step h2 { margin:0 0 8px; font-size:clamp(28px, 3.4vw, 40px); line-height:1.1; font-weight:300; letter-spacing:-.03em; color:var(--ink-strong); }
.quiz-step > p { margin:0 0 28px; color:var(--ink-muted); }
.options { display:grid; gap:10px; border:0; padding:0; margin:0; }
.option { position:relative; display:flex; align-items:center; gap:14px; padding:16px 18px; border:1px solid var(--line); border-radius:16px; cursor:pointer; transition:border-color .2s, background .2s, transform .3s var(--ease); font-size:15px; color:var(--ink); }
.option:hover { border-color:var(--ink-muted); }
.option input { position:absolute; opacity:0; pointer-events:none; }
.option .tick { width:22px; height:22px; border-radius:50%; border:1.5px solid var(--ink-muted); flex:none; display:grid; place-items:center; transition:background .2s, border-color .2s; }
.option input[type="checkbox"] + .tick { border-radius:7px; }
.option .tick svg { width:12px; height:12px; color:var(--on-lime); opacity:0; transform:scale(.5); transition:opacity .2s, transform .3s var(--ease); }
.option input:checked + .tick { background:var(--lime); border-color:var(--lime); }
.option input:checked + .tick svg { opacity:1; transform:none; }
.option:has(input:checked) { border-color:var(--ink-strong); background:var(--bg); }
.option:has(input:focus-visible) { outline:2px solid var(--ink); outline-offset:2px; }
.quiz-nav { display:flex; justify-content:space-between; align-items:center; margin-top:32px; gap:12px; }
.quiz-done { text-align:center; }
.quiz-done .done-mark { width:96px; height:96px; margin:0 auto 20px; border-radius:50%; background:var(--lime); color:var(--on-lime); display:grid; place-items:center; animation:popIn .6s var(--ease); }
.quiz-done .done-mark svg { width:40px; height:40px; }
.next-list { text-align:left; display:grid; gap:12px; margin:28px 0; }

/* login / auth */
.auth { display:grid; grid-template-columns:1fr 1fr; gap:0; min-height:calc(100vh - 72px); }
.auth-art { position:relative; background:var(--peri); display:grid; place-items:center; overflow:hidden; margin:0 0 20px 20px; border-radius:36px; }
.auth-art h2 { position:absolute; left:40px; bottom:40px; margin:0; font-size:clamp(34px, 4vw, 52px); line-height:1.02; font-weight:300; letter-spacing:-.03em; color:#1e3150; max-width:12ch; }
.auth-form { display:grid; place-items:center; padding:40px 20px; }
.auth-form form { width:min(420px, 100%); display:grid; gap:14px; }
.auth-form h1 { margin:0 0 6px; font-size:44px; font-weight:300; letter-spacing:-.03em; color:var(--ink-strong); }

/* help */
.topic { text-decoration:none; display:flex; flex-direction:column; gap:10px; border-radius:var(--r-xl); padding:26px; background:var(--surface); border:1px solid var(--line); transition:border-color .25s; }
.topic:hover { border-color:var(--ink-muted); }
.topic .t-icon { width:48px; height:48px; border-radius:14px; background:var(--mist); color:var(--on-mist); display:grid; place-items:center; }
.topic .t-icon svg { width:22px; height:22px; }
.topic h3 { margin:6px 0 0; font-size:18px; font-weight:500; color:var(--ink-strong); }
.topic p { margin:0; font-size:14px; color:var(--ink-muted); }
.help-results { list-style:none; margin:14px 0 0; padding:0; display:grid; gap:8px; max-width:640px; }
.help-results li a { display:block; padding:12px 16px; border-radius:12px; background:var(--surface); border:1px solid var(--line); text-decoration:none; font-size:15px; }

/* legal */
.legal-layout { display:grid; grid-template-columns:240px 1fr; gap:64px; align-items:start; }
.legal-nav { position:sticky; top:100px; display:grid; gap:4px; }
.legal-nav p { margin:0 0 10px; font-size:13px; color:var(--ink-muted); }
.legal-nav button, .legal-nav a { text-align:left; background:none; border:0; padding:8px 12px; border-radius:10px; font-size:14px; color:var(--ink); text-decoration:none; border-left:2px solid transparent; }
.legal-nav button:hover, .legal-nav a:hover { background:var(--surface); }
.legal-nav a[aria-current="page"] { background:var(--surface); color:var(--ink-strong); font-weight:500; }
.legal-body section { scroll-margin-top:100px; }

/* 404 */
.lost { min-height:70vh; display:grid; place-items:center; text-align:center; }
.lost .big { font-family:var(--font-serif); font-style:italic; font-size:clamp(140px, 24vw, 300px); line-height:.9; color:var(--peri); }

@media (max-width: 960px) {
  .nav-links, .nav-login, .nav-cta { display:none !important; }
  .menu-btn { display:grid; margin-left:auto; }
  .detail-hero, .story, .featured, .auth, .legal-layout { grid-template-columns:1fr; }
  .story-visual { position:relative; top:0; height:460px; }
  .story-step { min-height:auto; padding:40px 0; opacity:1; }
  .grid-3, .grid-4 { grid-template-columns:1fr 1fr; }
  .auth-art { min-height:280px; margin:0 20px; }
  .legal-nav { position:static; grid-auto-flow:column; overflow-x:auto; }
}
@media (max-width: 640px) {
  .grid-2, .grid-3, .grid-4 { grid-template-columns:1fr; }
  .featured-body { padding:26px; }
}

/* fixes carried from last pass */
.article-art > div { height:62%; display:grid; place-items:center; will-change:transform; }
.article-art > div svg { height:100%; }
.mobile-menu .btn { justify-content:center; width:100%; }

/* ================= blog ================= */
.blog-tools { display:flex; flex-wrap:wrap; gap:16px; align-items:center; justify-content:space-between; margin:56px 0 14px; }
.blog-tools .search { max-width:360px; }
.load-more { border:1px solid var(--line); background:var(--surface); padding:0 26px; }
.load-more:hover { border-color:var(--ink-muted); }
.post:focus-visible { outline:2px solid var(--ink); outline-offset:3px; }
.featured-art > div svg { height:100%; }
.byline { display:flex; align-items:center; gap:12px; margin-top:6px; font-size:14px; color:var(--ink-strong); }
.byline .ava { width:44px; height:44px; border-radius:50%; background:var(--mist); color:var(--on-mist); display:grid; place-items:center; font-size:13px; font-weight:600; flex:none; }
.byline b { font-weight:500; }
.post-hero { max-width:1080px; margin:36px auto 56px; height:420px; }
.post-layout { display:grid; grid-template-columns:220px minmax(0, 720px); gap:64px; justify-content:center; align-items:start; }
.post-aside { position:sticky; top:100px; }
.toc { display:grid; gap:2px; border-left:1px solid var(--line); }
.toc button { text-align:left; background:none; border:0; padding:8px 14px; margin-left:-1px; border-left:2px solid transparent; font-size:14px; line-height:1.35; color:var(--ink-muted); transition:color .25s, border-color .25s; }
.toc button:hover { color:var(--ink-strong); }
.toc button.is-active { color:var(--ink-strong); border-left-color:var(--peri); font-weight:500; }
.share { display:flex; flex-wrap:wrap; gap:8px; }
.post-prose h2 { scroll-margin-top:100px; }
.tags { display:flex; flex-wrap:wrap; align-items:center; gap:10px; margin-top:36px; padding-top:24px; border-top:1px solid var(--line); }
.tags .chip { display:inline-flex; align-items:center; text-decoration:none; }
.prev-next { display:grid; grid-template-columns:1fr 1fr; gap:16px; margin-top:28px; }
.prev-next a { display:grid; gap:6px; padding:20px 22px; border-radius:var(--r-lg); background:var(--surface); border:1px solid var(--line); text-decoration:none; transition:border-color .25s, transform .4s var(--ease); }
.prev-next a:hover { border-color:var(--ink-muted); transform:translateY(-2px); }
.prev-next b { font-size:16px; line-height:1.3; font-weight:500; color:var(--ink-strong); }
.blog-sub { position:relative; z-index:1; display:flex; flex-wrap:wrap; gap:12px; align-items:center; max-width:520px; }
.blog-sub input { flex:1; min-width:220px; height:48px; border-radius:var(--pill); border:1px solid rgba(193,212,227,.5); background:transparent; color:#f4f4f4; padding:0 20px; font-size:15px; }
.blog-sub input::placeholder { color:#c1d4e3; }
.blog-sub input:focus { outline:2px solid var(--lime); outline-offset:2px; }

/* footer blog column */
.foot-grid { grid-template-columns:repeat(3, auto) minmax(200px, 260px) 1fr; }
.foot-blog ul li a { display:block; line-height:1.35; }
.foot-all { display:inline-block; margin-top:14px; font-size:13px; font-weight:600; color:var(--lime); }

@media (max-width: 960px) {
  .post-layout { grid-template-columns:1fr; gap:24px; }
  .post-aside { position:static; }
  .toc { display:none; }
  .post-aside > .note:first-child { display:none; }
  .post-hero { height:300px; }
  .foot-grid { grid-template-columns:repeat(2, 1fr); }
}
@media (max-width: 640px) { .prev-next { grid-template-columns:1fr; } .prev-next a[style] { text-align:left !important; } }

[hidden] { display:none !important; }

/* ---------- editorial page polish ---------- */
.page-intro { max-width:760px; }
.page-intro p { font-size:18px; color:var(--ink-muted); }
.archive-toolbar { position:sticky; top:72px; z-index:20; background:var(--bg); background:color-mix(in srgb, var(--bg) 92%, transparent); backdrop-filter:blur(12px); }
.empty-state a { font-weight:600; }
.pwr-quick-actions { display:flex; gap:14px; align-items:center; flex-wrap:wrap; margin:18px 0 22px; padding:14px 16px; background:var(--surface); border:1px solid var(--line); border-radius:12px; }
.pwr-quick-actions span { color:#646970; font-size:13px; }
@media (max-width:720px) { .archive-toolbar { top:60px; } }
/* ==== assets/css/src/reviews.css ==== */
/* =====================================================================
   Periwinkle Reviews — review platform components
   Built on the Periwinkle Care tokens defined above. Animation states are
   driven by classes the JS adds (.is-in); without JS everything is visible.
   ===================================================================== */

.skip-link:focus { position:fixed; left:12px; top:12px; width:auto; height:auto; clip:auto; z-index:200; background:var(--surface); padding:10px 16px; border-radius:var(--pill); }
.admin-bar .nav { top:32px; }
@media (max-width:782px) { .admin-bar .nav { top:46px; } }
.site-main { min-height:60vh; }
.custom-logo-link img { max-height:36px; width:auto; }

/* ---------- tones ---------- */
.tone-lime { --tone:var(--lime); --on-tone:var(--on-lime); }
.tone-peri { --tone:var(--peri); --on-tone:var(--on-peri); }
.tone-mist { --tone:var(--mist); --on-tone:var(--on-mist); }
.tone-sand { --tone:var(--sand); --on-tone:var(--on-sand); }
.tone-navy { --tone:var(--ink-strong); --on-tone:#fff; }
.badge-row { display:flex; flex-wrap:wrap; gap:6px; }
.badge { display:inline-flex; align-items:center; gap:6px; }
.badge img { width:14px; height:14px; }
.badge-peri { background:var(--peri); color:var(--on-peri); }
.badge-mist { background:var(--mist); color:var(--on-mist); }
.badge-sand { background:var(--sand); color:var(--on-sand); }
.badge-navy { background:var(--ink-strong); color:#fff; }
.eyebrow { font-size:12px; font-weight:600; letter-spacing:.08em; text-transform:uppercase; color:var(--ink-muted); margin:0 0 10px; }

/* ---------- score ring ---------- */
.score-ring { position:relative; display:inline-grid; place-items:center; width:var(--size,132px); aspect-ratio:1; flex:none; }
.score-ring svg { position:absolute; inset:0; width:100%; height:100%; transform:rotate(-90deg); }
.score-ring .sr-track { fill:none; stroke:var(--line); stroke-width:9; }
.score-ring .sr-fill { fill:none; stroke:var(--tone, var(--peri)); stroke-width:9; stroke-linecap:round; stroke-dasharray:100; stroke-dashoffset:calc(100 - var(--p, 0)); transition:stroke-dashoffset 1.4s var(--ease); }
:root[data-theme="dark"] .score-ring.tone-mist .sr-fill { stroke:var(--peri); }
.js .anim:not(.is-in) .sr-fill { stroke-dashoffset:100; }
.score-ring .sr-num { position:relative; text-align:center; line-height:1; }
.score-ring .sr-num b { display:block; font-size:calc(var(--size,132px) * .3); font-weight:500; letter-spacing:-.03em; color:var(--ink-strong); }
.score-ring .sr-num span { font-size:12px; color:var(--ink-muted); }
.score-ring .sr-label { position:absolute; bottom:-14px; left:50%; transform:translateX(-50%); white-space:nowrap; font-size:11px; font-weight:600; letter-spacing:.05em; text-transform:uppercase; background:var(--tone, var(--mist)); color:var(--on-tone, var(--on-mist)); padding:4px 10px; border-radius:var(--pill); }
.score-ring.sm { --size:64px; }
.score-ring.sm .sr-track, .score-ring.sm .sr-fill { stroke-width:11; }
.score-ring.sm .sr-num span, .score-ring.sm .sr-label { display:none; }

.score-chip { display:inline-flex; align-items:baseline; gap:2px; padding:5px 10px; border-radius:var(--pill); background:var(--tone, var(--mist)); color:var(--on-tone, var(--on-mist)); font-size:13px; line-height:1; }
.score-chip b { font-size:15px; font-weight:600; }
.score-chip span { opacity:.75; font-size:11px; }

/* ---------- rating bars ---------- */
.rbars { list-style:none; margin:0; padding:0; display:grid; gap:18px; }
.rbar-top { display:flex; justify-content:space-between; gap:12px; font-size:15px; margin-bottom:8px; }
.rbar-top b { font-weight:600; color:var(--ink-strong); font-variant-numeric:tabular-nums; }
.rbar-track { height:8px; border-radius:var(--pill); background:var(--line); overflow:hidden; }
.rbar-track i { display:block; height:100%; width:calc(var(--p, 0) * 1%); background:linear-gradient(90deg, var(--peri), var(--ink)); border-radius:inherit; transition:width 1.2s var(--ease); transition-delay:calc(var(--i, 0) * 90ms); }
.js .anim:not(.is-in) .rbar-track i { width:0; }
.rbar p { margin:6px 0 0; font-size:14px; color:var(--ink-muted); }
.rbar small { color:var(--ink-muted); font-weight:400; margin-left:6px; }
.calc-note { margin-top:18px; font-size:13px; color:var(--ink-muted); }
.calc-note summary { cursor:pointer; font-weight:600; color:var(--ink); }
.calc-table { width:100%; border-collapse:collapse; margin-top:10px; font-size:13px; }
.calc-table th, .calc-table td { text-align:left; padding:6px 8px; border-bottom:1px solid var(--line); font-variant-numeric:tabular-nums; }

/* ---------- product and review cards ---------- */
.card-grid { display:grid; grid-template-columns:repeat(auto-fill, minmax(280px, 1fr)); gap:20px; }
.pcard { position:relative; display:flex; flex-direction:column; background:var(--surface); border:1px solid var(--line); border-radius:var(--r-lg); overflow:hidden; transform-style:preserve-3d; transition:transform .5s var(--ease), box-shadow .4s, border-color .3s; }
.pcard:hover { box-shadow:0 22px 44px -26px rgba(42,67,107,.45); border-color:var(--mist); }
.pcard-media { position:relative; aspect-ratio:16/10; background:var(--mist); overflow:hidden; }
.pcard-media img { width:100%; height:100%; object-fit:cover; transition:transform .8s var(--ease); }
.pcard:hover .pcard-media img { transform:scale(1.04); }
.pcard-media .badge-row { position:absolute; left:12px; top:12px; }
.pcard-body { display:flex; flex-direction:column; gap:10px; padding:18px 20px 20px; flex:1; }
.pcard-head { display:flex; align-items:center; gap:12px; }
.logo-box { width:44px; height:44px; flex:none; border-radius:12px; background:var(--bg); border:1px solid var(--line); display:grid; place-items:center; overflow:hidden; }
.logo-box img { width:100%; height:100%; object-fit:contain; padding:6px; }
.logo-box.lg { width:72px; height:72px; border-radius:18px; }
.logo-box .initial { font-weight:600; color:var(--ink); }
.pcard h3 { margin:0; font-size:18px; font-weight:500; line-height:1.25; color:var(--ink-strong); }
.pcard h3 a { text-decoration:none; }
.pcard h3 a::after { content:""; position:absolute; inset:0; z-index:1; }
.pcard p { margin:0; font-size:14px; color:var(--ink-muted); }
.pcard-foot { margin-top:auto; display:flex; align-items:center; justify-content:space-between; gap:10px; padding-top:8px; font-size:13px; color:var(--ink-muted); }
.pcard-foot .price { font-weight:600; color:var(--ink); }
.pcard .type-label { font-size:11px; font-weight:600; letter-spacing:.08em; text-transform:uppercase; color:var(--ink-muted); }
.pcard .cmp-logos { display:flex; }
.pcard .cmp-logos .logo-box { width:36px; height:36px; margin-right:-8px; box-shadow:0 0 0 2px var(--surface); }

/* ---------- review hero ---------- */
.review-hero { padding:120px 0 56px; }
.review-hero .crumbs { margin-bottom:22px; }
.rh-grid { display:grid; grid-template-columns:minmax(0, 1.25fr) minmax(0, .75fr); gap:48px; align-items:center; }
.rh-title { display:flex; align-items:center; gap:18px; margin-bottom:18px; }
.rh-title h1 { margin:0; font-size:clamp(34px, 5vw, 58px); font-weight:400; line-height:1.04; letter-spacing:-.025em; color:var(--ink-strong); }
.rh-lead { font-size:19px; line-height:1.55; max-width:56ch; color:var(--ink); margin:0 0 22px; }
.rh-meta { display:flex; flex-wrap:wrap; gap:8px 18px; font-size:14px; color:var(--ink-muted); margin-bottom:24px; }
.rh-meta b { color:var(--ink); font-weight:500; }
.rh-actions { display:flex; flex-wrap:wrap; align-items:center; gap:14px; }
.rh-card { position:relative; background:var(--surface); border:1px solid var(--line); border-radius:var(--r-xl); padding:30px 26px 26px; display:grid; gap:18px; justify-items:center; text-align:center; }
.rh-card .price-big { font-size:22px; font-weight:500; color:var(--ink-strong); }
.rh-card .user-rating { font-size:13px; color:var(--ink-muted); }
.rh-media { margin-top:40px; border-radius:var(--r-xl); overflow:hidden; background:var(--mist); }
.rh-media img { width:100%; max-height:560px; object-fit:cover; }
.disclosure { font-size:13px; color:var(--ink-muted); display:flex; gap:8px; align-items:flex-start; margin:14px 0 0; }
.disclosure .pwr-icon { width:16px; height:16px; flex:none; margin-top:2px; }

/* ---------- review layout with sticky aside ---------- */
.review-layout { display:grid; grid-template-columns:minmax(0, 1fr) 320px; gap:48px; align-items:start; }
.review-aside { position:sticky; top:96px; display:grid; gap:16px; }
.review-toc { background:var(--surface); border:1px solid var(--line); border-radius:var(--r-lg); padding:18px; }
.review-toc p { margin:0 0 10px; font-size:12px; font-weight:600; letter-spacing:.08em; text-transform:uppercase; color:var(--ink-muted); }
.review-toc ol { list-style:none; margin:0; padding:0; display:grid; gap:2px; }
.review-toc a { display:block; padding:7px 10px; border-radius:var(--r-sm); text-decoration:none; font-size:14px; color:var(--ink-muted); transition:background .2s, color .2s; }
.review-toc a:hover, .review-toc a.is-active { background:var(--bg); color:var(--ink-strong); }
.review-block { padding:44px 0; border-top:1px solid var(--line); scroll-margin-top:90px; }
.review-block:first-child { border-top:0; padding-top:8px; }
.review-block > h2 { margin:0 0 22px; font-size:clamp(26px, 3vw, 36px); font-weight:400; letter-spacing:-.02em; color:var(--ink-strong); }
.review-block > h2 .serif { color:var(--ink); }

/* ---------- summary box ---------- */
.summary-box { display:grid; grid-template-columns:auto minmax(0, 1fr); gap:28px; align-items:center; background:var(--surface); border:1px solid var(--line); border-radius:var(--r-xl); padding:28px; }
.summary-box dl { margin:0; display:grid; grid-template-columns:repeat(2, minmax(0, 1fr)); gap:14px 24px; }
.summary-box dt { font-size:12px; font-weight:600; letter-spacing:.06em; text-transform:uppercase; color:var(--ink-muted); }
.summary-box dd { margin:4px 0 0; font-size:15px; color:var(--ink-strong); }
.summary-box .verdict { grid-column:1 / -1; margin:0; padding-top:18px; border-top:1px solid var(--line); font-size:17px; line-height:1.55; }
.summary-box .verdict::before { content:"“"; font-family:var(--font-serif); font-size:32px; line-height:0; vertical-align:-10px; margin-right:4px; color:var(--peri); }
.summary-box .actions { grid-column:1 / -1; display:flex; flex-wrap:wrap; gap:12px; align-items:center; }

/* ---------- pros and cons ---------- */
.proscons { display:grid; grid-template-columns:1fr 1fr; gap:16px; }
.pc-col { background:var(--surface); border:1px solid var(--line); border-radius:var(--r-lg); padding:22px; }
.pc-col h3 { display:flex; align-items:center; gap:8px; margin:0 0 14px; font-size:16px; font-weight:600; }
.pc-list { list-style:none; margin:0; padding:0; display:grid; gap:10px; }
.pc-list li { display:grid; grid-template-columns:22px 1fr; gap:10px; font-size:15px; line-height:1.45; }
.pc-ico { width:22px; height:22px; border-radius:50%; display:grid; place-items:center; }
.pc-ico .pwr-icon { width:13px; height:13px; }
.pc-pros .pc-ico { background:var(--lime); color:var(--on-lime); }
.pc-cons .pc-ico { background:var(--sand); color:var(--on-sand); }
.pc-list li.is-extra { display:none; }
.pc-col.is-expanded li.is-extra { display:grid; animation:popIn .4s var(--ease); }
.pc-more { margin-top:12px; background:none; border:0; padding:0; font-size:13px; font-weight:600; color:var(--ink); cursor:pointer; text-decoration:underline; text-underline-offset:3px; }

/* ---------- ranking ---------- */
.rank-list { display:grid; gap:18px; counter-reset:rank; }
.rank-card { position:relative; display:grid; grid-template-columns:84px minmax(0, 1fr) 220px; gap:24px; align-items:start; background:var(--surface); border:1px solid var(--line); border-radius:var(--r-xl); padding:26px; transition:transform .5s var(--ease), box-shadow .4s; }
.rank-card:hover { box-shadow:0 26px 50px -30px rgba(42,67,107,.5); }
.rank-card.is-top { border-color:var(--peri); box-shadow:inset 0 0 0 1px var(--peri); }
.rank-num { font-family:var(--font-serif); font-style:italic; font-size:64px; line-height:.9; color:var(--ink-strong); }
.rank-num small { font-family:var(--font-sans); font-style:normal; font-size:18px; vertical-align:top; margin-right:2px; color:var(--ink-muted); }
.rank-main h3 { margin:0; font-size:22px; font-weight:500; color:var(--ink-strong); }
.rank-main h3 a { text-decoration:none; }
.rank-main h3 a:hover { text-decoration:underline; text-underline-offset:4px; }
.rank-head { display:flex; align-items:center; gap:14px; margin-bottom:10px; flex-wrap:wrap; }
.rank-main > p { margin:0 0 16px; color:var(--ink); }
.rank-main .proscons { gap:10px; }
.rank-main .pc-col { padding:14px 16px; border-radius:var(--r-sm); }
.rank-main .pc-col h3 { font-size:13px; margin-bottom:10px; }
.rank-main .pc-list li { font-size:14px; }
.rank-side { display:grid; gap:12px; justify-items:center; text-align:center; }
.rank-side .price { font-size:14px; color:var(--ink-muted); }
.rank-side .price b { display:block; font-size:18px; font-weight:500; color:var(--ink-strong); }
.rank-side .text-link { font-size:13px; }
.js .rank-card.anim { opacity:0; transform:translateY(28px); transition:opacity .8s var(--ease), transform .8s var(--ease), box-shadow .4s; transition-delay:calc(var(--i, 0) * 70ms); }
.js .rank-card.anim.is-in { opacity:1; transform:none; }

/* ---------- comparison ---------- */
.cmp-tabs { display:flex; flex-wrap:wrap; gap:8px; margin-bottom:18px; }
.cmp-tabs [role="tab"] { border:1px solid var(--line); background:var(--surface); color:var(--ink); border-radius:var(--pill); padding:9px 16px; font-size:13px; font-weight:600; cursor:pointer; transition:background .25s, color .25s, border-color .25s; }
.cmp-tabs [role="tab"][aria-selected="true"] { background:var(--ink-strong); border-color:var(--ink-strong); color:#fff; }
.cmp-wrap { overflow-x:auto; border:1px solid var(--line); border-radius:var(--r-lg); background:var(--surface); -webkit-overflow-scrolling:touch; }
.cmp { width:100%; border-collapse:separate; border-spacing:0; min-width:560px; font-size:15px; }
.cmp th, .cmp td { padding:14px 16px; border-bottom:1px solid var(--line); text-align:center; vertical-align:middle; }
.cmp tbody tr:last-child th, .cmp tbody tr:last-child td { border-bottom:0; }
.cmp thead th { position:sticky; top:0; background:var(--surface); z-index:2; vertical-align:bottom; padding-top:20px; }
.cmp th[scope="row"] { position:sticky; left:0; z-index:1; background:var(--surface); text-align:left; font-weight:500; color:var(--ink-muted); min-width:150px; }
.cmp thead th:first-child { left:0; z-index:3; }
.cmp-prod { display:grid; justify-items:center; gap:8px; }
.cmp-prod a { font-weight:600; color:var(--ink-strong); text-decoration:none; }
.cmp-prod .badge { font-size:10px; }
.cmp td.is-best { background:color-mix(in srgb, var(--lime) 28%, var(--surface)); font-weight:600; }
:root[data-theme="dark"] .cmp td.is-best { background:color-mix(in srgb, var(--lime) 12%, var(--surface)); }
.cmp .best-tag { display:block; font-size:10px; font-weight:600; letter-spacing:.06em; text-transform:uppercase; color:var(--ink-muted); margin-top:3px; }
.yn { display:inline-grid; place-items:center; width:26px; height:26px; border-radius:50%; }
.yn .pwr-icon { width:14px; height:14px; }
.yn-yes { background:var(--lime); color:var(--on-lime); }
.yn-no { background:var(--sand); color:var(--on-sand); }
.yn-partial { background:var(--mist); color:var(--on-mist); }
.cmp-rating { display:inline-grid; gap:6px; min-width:84px; }
.cmp-rating i { display:block; height:6px; border-radius:var(--pill); background:var(--line); overflow:hidden; }
.cmp-rating i::after { content:""; display:block; height:100%; width:calc(var(--p, 0) * 1%); background:var(--peri); border-radius:inherit; transition:width 1.1s var(--ease); }
.js .anim:not(.is-in) .cmp-rating i::after { width:0; }
.cmp tr[hidden] { display:none; }
.cmp tfoot td { border-top:1px solid var(--line); border-bottom:0; }
.winner-box { display:grid; grid-template-columns:auto 1fr; gap:22px; align-items:center; background:var(--deep); color:var(--on-deep); border-radius:var(--r-xl); padding:30px; }
.winner-box h3 { margin:0 0 6px; font-size:26px; font-weight:400; }
.winner-box p { margin:0 0 14px; color:var(--on-deep-muted); }
.winner-box .score-ring .sr-num b { color:var(--on-deep); }
.winner-box .score-ring .sr-track { stroke:rgba(255,255,255,.15); }
.best-for { display:grid; grid-template-columns:repeat(auto-fit, minmax(220px, 1fr)); gap:14px; }
.best-for .card { padding:20px; }
.best-for .card small { display:block; font-size:12px; font-weight:600; letter-spacing:.06em; text-transform:uppercase; color:var(--ink-muted); margin-bottom:8px; }
.vs-hero h1 .vs { font-family:var(--font-serif); font-style:italic; color:var(--peri); padding:0 .15em; }
.vs-logos { display:flex; gap:14px; align-items:center; margin-bottom:18px; }

/* ---------- pricing ---------- */
.plans { display:grid; grid-template-columns:repeat(auto-fit, minmax(230px, 1fr)); gap:16px; align-items:stretch; }
.plans .plan { display:flex; flex-direction:column; }
.plans .plan .btn { margin-top:auto; align-self:flex-start; }
.plan .was { text-decoration:line-through; color:var(--ink-muted); font-size:14px; margin-left:6px; }
.plan .plan-discount { display:inline-block; margin-top:4px; }

/* ---------- specs and features ---------- */
.spec-table { width:100%; border-collapse:collapse; background:var(--surface); border:1px solid var(--line); border-radius:var(--r-lg); overflow:hidden; }
.spec-table th, .spec-table td { text-align:left; padding:13px 18px; border-bottom:1px solid var(--line); font-size:15px; }
.spec-table th { width:40%; font-weight:500; color:var(--ink-muted); }
.spec-table tr:last-child th, .spec-table tr:last-child td { border-bottom:0; }
.feature-grid { display:grid; grid-template-columns:repeat(auto-fill, minmax(240px, 1fr)); gap:12px; }
.feature { display:grid; grid-template-columns:26px 1fr; gap:12px; background:var(--surface); border:1px solid var(--line); border-radius:var(--r-lg); padding:16px; }
.feature b { font-weight:600; color:var(--ink-strong); display:block; }
.feature small { color:var(--ink-muted); font-size:14px; }

/* ---------- gallery slider ---------- */
.slider { position:relative; }
.slider-track { display:grid; grid-auto-flow:column; grid-auto-columns:min(78%, 720px); gap:14px; overflow-x:auto; scroll-snap-type:x mandatory; scrollbar-width:none; padding-bottom:4px; }
.slider-track::-webkit-scrollbar { display:none; }
.slider-track figure { margin:0; scroll-snap-align:start; border-radius:var(--r-lg); overflow:hidden; background:var(--mist); }
.slider-track img { width:100%; height:100%; object-fit:cover; aspect-ratio:16/10; }
.slider-track figcaption { padding:10px 14px; font-size:13px; color:var(--ink-muted); background:var(--surface); }
.slider-nav { display:flex; gap:8px; justify-content:flex-end; margin-top:12px; }
.slider-nav button { width:42px; height:42px; border-radius:50%; border:1px solid var(--line); background:var(--surface); color:var(--ink); cursor:pointer; display:grid; place-items:center; transition:background .2s; }
.slider-nav button:hover { background:var(--mist); }
.slider-nav button[disabled] { opacity:.4; cursor:default; }
.slider-nav .pwr-icon { width:20px; height:20px; }
.slider-nav .prev .pwr-icon { transform:rotate(180deg); }

/* ---------- video ---------- */
.video-card { background:var(--surface); border:1px solid var(--line); border-radius:var(--r-lg); overflow:hidden; }
.video-embed { position:relative; aspect-ratio:16/9; background:#0c1422; }
.video-embed iframe, .video-embed video, .video-embed .wp-video, .video-embed .wp-video-shortcode { position:absolute; inset:0; width:100% !important; height:100% !important; border:0; }
.video-body { padding:16px 18px; }
.video-body h3 { margin:0 0 4px; font-size:17px; font-weight:500; }
.video-body p { margin:0; font-size:14px; color:var(--ink-muted); }
.video-body details { margin-top:10px; font-size:14px; }
.video-body details summary { cursor:pointer; font-weight:600; }

/* ---------- deals ---------- */
.deal-card { display:grid; grid-template-columns:auto 1fr; gap:16px; background:var(--surface); border:1px dashed var(--peri); border-radius:var(--r-lg); padding:20px; position:relative; }
.deal-card .discount { grid-row:span 2; display:grid; place-items:center; min-width:92px; padding:10px; border-radius:var(--r-sm); background:var(--lime); color:var(--on-lime); font-weight:600; text-align:center; line-height:1.15; }
.deal-card h3 { margin:0 0 4px; font-size:17px; font-weight:500; color:var(--ink-strong); }
.deal-card p { margin:0; font-size:14px; color:var(--ink-muted); }
.deal-actions { grid-column:2; display:flex; flex-wrap:wrap; gap:10px; align-items:center; }
.coupon { display:inline-flex; align-items:center; gap:8px; border:1px dashed var(--ink-muted); background:var(--bg); border-radius:var(--pill); padding:8px 14px; font-family:ui-monospace, Menlo, monospace; font-size:14px; letter-spacing:.06em; cursor:pointer; color:var(--ink-strong); }
.coupon .pwr-icon { width:15px; height:15px; }
.coupon.is-copied { border-style:solid; border-color:var(--ink); }
.deal-meta { font-size:12px; color:var(--ink-muted); display:flex; gap:12px; flex-wrap:wrap; }
.deal-meta .verified { color:var(--ink); font-weight:600; display:inline-flex; gap:4px; align-items:center; }
.deal-meta .verified .pwr-icon { width:14px; height:14px; color:var(--peri); }
.deal-card.is-expired { opacity:.6; border-style:solid; border-color:var(--line); }
.deal-card.is-expired .discount { background:var(--sand); color:var(--on-sand); }

/* ---------- affiliate CTA ---------- */
.aff-cta { display:flex; flex-wrap:wrap; align-items:center; justify-content:space-between; gap:18px; background:var(--mist); color:var(--on-mist); border-radius:var(--r-xl); padding:24px 28px; }
.aff-cta-info { display:flex; align-items:center; gap:14px; }
.aff-cta h3 { margin:0; font-size:20px; font-weight:500; }
.aff-cta p { margin:2px 0 0; font-size:14px; opacity:.85; }
.aff-cta .disclosure { flex-basis:100%; margin:0; color:inherit; opacity:.75; }
.aside-cta { background:var(--surface); border:1px solid var(--line); border-radius:var(--r-lg); padding:20px; display:grid; gap:14px; }
.aside-cta .aside-top { display:flex; gap:12px; align-items:center; }
.aside-cta b { color:var(--ink-strong); font-weight:600; }
.aside-cta .magnetic, .aside-cta .btn { width:100%; justify-content:space-between; }

/* ---------- people ---------- */
.person-box { display:grid; grid-template-columns:auto 1fr; gap:18px; align-items:start; background:var(--surface); border:1px solid var(--line); border-radius:var(--r-lg); padding:22px; }
.person-photo { width:72px; height:72px; border-radius:50%; overflow:hidden; background:var(--mist); display:grid; place-items:center; font-size:24px; color:var(--on-mist); }
.person-photo img { width:100%; height:100%; object-fit:cover; }
.person-box small { font-size:12px; font-weight:600; letter-spacing:.06em; text-transform:uppercase; color:var(--ink-muted); }
.person-box h3 { margin:2px 0; font-size:18px; font-weight:500; }
.person-box h3 a { text-decoration:none; }
.person-box .role { color:var(--ink-muted); font-size:14px; margin:0 0 8px; }
.person-box p { margin:0; font-size:14px; }
.person-box .verified { display:inline-flex; align-items:center; gap:4px; font-size:12px; font-weight:600; color:var(--ink); }
.person-box .verified .pwr-icon { width:15px; height:15px; color:var(--peri); }
.editorial-line { display:flex; flex-wrap:wrap; gap:6px 20px; font-size:14px; color:var(--ink-muted); }
.editorial-line a { color:var(--ink-strong); font-weight:500; }
.people-row { display:grid; grid-template-columns:repeat(auto-fit, minmax(280px, 1fr)); gap:14px; }

/* ---------- methodology ---------- */
.method-box { background:var(--sand); color:var(--on-sand); border-radius:var(--r-xl); padding:28px; }
.method-box h3 { margin:0 0 10px; font-size:22px; font-weight:400; }
.method-box .weights { display:flex; flex-wrap:wrap; gap:8px; margin:14px 0; padding:0; list-style:none; }
.method-box .weights li { background:rgba(255,255,255,.55); border-radius:var(--pill); padding:6px 12px; font-size:13px; }
:root[data-theme="dark"] .method-box .weights li { background:rgba(0,0,0,.2); }
.method-box .prose p { color:inherit; }

/* ---------- user reviews ---------- */
.ur-summary { display:flex; align-items:center; gap:18px; margin-bottom:22px; }
.ur-list { display:grid; gap:14px; margin-bottom:26px; }
.ur-item { background:var(--surface); border:1px solid var(--line); border-radius:var(--r-lg); padding:18px 20px; }
.ur-item header { display:flex; flex-wrap:wrap; align-items:center; gap:10px; margin-bottom:8px; font-size:14px; }
.ur-item header b { color:var(--ink-strong); }
.ur-item header time { color:var(--ink-muted); margin-left:auto; }
.ur-item p { margin:0; font-size:15px; }
.pwr-ur-form { padding:24px; display:grid; gap:14px; max-width:620px; }
.pwr-ur-form h3 { margin:0; }
.pwr-hp { position:absolute !important; left:-9999px !important; width:1px; height:1px; overflow:hidden; }

/* ---------- ads ---------- */
.pwr-ad { position:relative; margin:28px auto; text-align:center; }
.pwr-ad img { margin-inline:auto; border-radius:var(--r-sm); }
.pwr-ad-label { display:block; font-size:10px; letter-spacing:.1em; text-transform:uppercase; color:var(--ink-muted); margin-bottom:6px; }
.pwr-ad-native { text-align:left; background:var(--surface); border:1px solid var(--line); border-radius:var(--r-lg); padding:16px; }
.pwr-ad-at-header { margin:0 auto; padding:8px 0; }
.pwr-sticky-ad { position:fixed; left:0; right:0; bottom:0; z-index:60; background:var(--glass); backdrop-filter:blur(12px); border-top:1px solid var(--line); padding:6px 44px 6px 12px; }
.pwr-sticky-ad .pwr-ad { margin:0 auto; max-width:970px; }
.pwr-sticky-ad .pwr-ad img { max-height:90px; width:auto; }
.pwr-sticky-close { position:absolute; right:10px; top:50%; transform:translateY(-50%); width:30px; height:30px; border-radius:50%; border:1px solid var(--line); background:var(--surface); cursor:pointer; }
.pwr-sticky-ad.is-closed { display:none; }

/* ---------- archive, search, filters ---------- */
.filter-bar { display:grid; grid-template-columns:2fr repeat(4, minmax(0, 1fr)) auto; gap:10px; align-items:end; background:var(--surface); border:1px solid var(--line); border-radius:var(--r-lg); padding:16px; margin-bottom:26px; }
.filter-bar label { display:grid; gap:6px; font-size:12px; font-weight:600; color:var(--ink-muted); }
.filter-bar .input { min-height:44px; }
.results-meta { display:flex; justify-content:space-between; align-items:center; gap:12px; margin-bottom:18px; color:var(--ink-muted); font-size:14px; }
.pagination { display:flex; justify-content:center; gap:6px; margin-top:36px; flex-wrap:wrap; }
.pagination .page-numbers { min-width:42px; height:42px; display:grid; place-items:center; padding:0 12px; border-radius:var(--pill); border:1px solid var(--line); text-decoration:none; background:var(--surface); }
.pagination .page-numbers.current { background:var(--ink-strong); color:#fff; border-color:var(--ink-strong); }
.cat-grid { display:grid; grid-template-columns:repeat(auto-fill, minmax(200px, 1fr)); gap:14px; }
.cat-tile { position:relative; display:flex; align-items:center; gap:12px; padding:18px; border-radius:var(--r-lg); background:var(--surface); border:1px solid var(--line); text-decoration:none; transition:transform .45s var(--ease), background .3s; }
.cat-tile:hover { background:var(--mist); transform:translateY(-3px); }
.cat-tile img { width:36px; height:36px; object-fit:contain; }
.cat-tile b { display:block; font-weight:500; color:var(--ink-strong); }
.cat-tile small { color:var(--ink-muted); }
.empty-state { text-align:center; padding:56px 20px; background:var(--surface); border:1px dashed var(--line); border-radius:var(--r-xl); color:var(--ink-muted); }
.brand-hero .cover { height:240px; border-radius:var(--r-xl); overflow:hidden; background:linear-gradient(120deg, var(--mist), var(--peri)); margin-bottom:-60px; }
.brand-hero .cover img { width:100%; height:100%; object-fit:cover; }
.facts { display:flex; flex-wrap:wrap; gap:10px 28px; margin:14px 0 0; padding:0; list-style:none; font-size:14px; color:var(--ink-muted); }
.facts b { display:block; color:var(--ink-strong); font-weight:500; font-size:15px; }
.home-hero-img img { border-radius:var(--r-xl); width:100%; object-fit:cover; max-height:520px; }
.news-block { background:var(--mist); color:var(--on-mist); border-radius:var(--r-xl); padding:40px; display:grid; grid-template-columns:1fr 1fr; gap:24px; align-items:center; }
.news-block form { display:flex; gap:10px; flex-wrap:wrap; }
.news-block .input { flex:1; min-width:200px; }
.references { font-size:14px; }
.references li { margin-bottom:6px; }

/* ---------- editor blocks ---------- */
.wp-block[data-type^="pwr/"] .pwr-block-empty { padding:18px; border:1px dashed #c1d4e3; border-radius:12px; color:#5b6b85; font-size:14px; }
.pwr-block + .pwr-block { margin-top:28px; }

/* ---------- responsive ---------- */
@media (max-width: 1080px) {
  .review-layout { grid-template-columns:1fr; }
  .review-aside { position:static; order:-1; grid-template-columns:1fr 1fr; }
  .review-toc { display:none; }
  .filter-bar { grid-template-columns:1fr 1fr 1fr; }
  .filter-bar label:first-child { grid-column:1 / -1; }
}
@media (max-width: 860px) {
  .rh-grid { grid-template-columns:1fr; gap:28px; }
  .rank-card { grid-template-columns:56px minmax(0, 1fr); }
  .rank-num { font-size:46px; }
  .rank-side { grid-column:1 / -1; grid-template-columns:auto 1fr; justify-items:start; text-align:left; align-items:center; }
  .rank-side .magnetic { grid-column:1 / -1; }
  .news-block { grid-template-columns:1fr; padding:28px; }
}
@media (max-width: 640px) {
  .review-hero { padding-top:96px; }
  .summary-box { grid-template-columns:1fr; justify-items:start; padding:22px; }
  .summary-box dl { grid-template-columns:1fr; }
  .proscons { grid-template-columns:1fr; }
  .review-aside { grid-template-columns:1fr; }
  .rank-card { padding:20px; gap:14px; }
  .rank-main .proscons { grid-template-columns:1fr; }
  .winner-box { grid-template-columns:1fr; }
  .deal-card { grid-template-columns:1fr; }
  .deal-card .discount { grid-row:auto; justify-self:start; }
  .deal-actions { grid-column:1; }
  .filter-bar { grid-template-columns:1fr 1fr; }
  .person-box { grid-template-columns:1fr; }
}
@media (prefers-reduced-motion: reduce) {
  .js .anim:not(.is-in) .sr-fill { stroke-dashoffset:calc(100 - var(--p, 0)); }
  .js .anim:not(.is-in) .rbar-track i { width:calc(var(--p, 0) * 1%); }
  .js .rank-card.anim { opacity:1; transform:none; }
  .score-ring .sr-fill, .rbar-track i, .cmp-rating i::after { transition:none; }
}
@media print {
  .nav, .footer, .pwr-ad, .pwr-sticky-ad, .review-aside, .cursor, .read-progress { display:none !important; }
  .review-layout { grid-template-columns:1fr; }
}

/* ---------- footer wordmark fits the real site name ----------
   The original size assumed a ten-letter name. --chars is printed by footer.php
   from the actual site title, so longer names shrink instead of overflowing. */
.wordmark { font-size: min(17vw, calc((100vw - 48px) / (var(--chars, 10) * 0.56))); max-width: 100%; flex-wrap: nowrap; }
@media (max-width: 720px) { .wordmark { font-size: min(15vw, calc((100vw - 40px) / (var(--chars, 10) * 0.58))); margin-bottom: 36px; } }

/* footer legal menu */
.legal .legal-links { display:flex; flex-wrap:wrap; gap:16px; list-style:none; margin:0; padding:0; }

/* ---------- sources, citations and trust marks ---------- */
.sources-list { margin:0; padding-left:20px; display:grid; gap:12px; font-size:15px; }
.sources-list li { line-height:1.5; }
.sources-list a { text-decoration:underline; text-underline-offset:3px; }
.sources-list .src-pub { display:block; font-size:13px; color:var(--ink-muted); }
.sources-list .src-dates { font-size:13px; color:var(--ink-muted); }
.rh-meta .reviewed-by, .rh-meta .fact-checked { display:inline-flex; align-items:center; gap:6px; }
.rh-meta .reviewed-by .pwr-icon, .rh-meta .fact-checked .pwr-icon { width:16px; height:16px; color:var(--peri); }

/* ---------- homepage: a distinct treatment per section ---------- */
.sec-trust { background:var(--surface); border-top:1px solid var(--line); border-bottom:1px solid var(--line); padding-block:56px; }
.trust-grid { display:grid; grid-template-columns:repeat(auto-fit, minmax(240px, 1fr)); gap:18px; }
.trust-card { padding:22px; border-radius:var(--r-lg); background:var(--bg); border:1px solid var(--line); }
.trust-card b { display:block; font-size:12px; font-weight:600; letter-spacing:.08em; text-transform:uppercase; color:var(--ink-muted); margin-bottom:8px; }
.trust-card p { margin:0; font-size:15px; color:var(--ink-strong); }

.sec-ranked { background:var(--surface); }
.sec-categories { background:var(--mist); color:var(--on-mist); }
.sec-categories .cat-tile { background:var(--surface); border-color:transparent; }
.sec-comparisons .card-grid { grid-template-columns:repeat(auto-fit, minmax(300px, 1fr)); }
.sec-deals { background:var(--sand); color:var(--on-sand); }
.sec-deals .deal-card { background:var(--surface); }
.sec-best-products .pcard, .sec-picks .pcard { border-color:var(--mist); }

.sec-brands { padding-block:48px; }
.brand-strip { display:grid; grid-template-columns:repeat(auto-fill, minmax(190px, 1fr)); gap:12px; }
.brand-chip { display:flex; align-items:center; gap:12px; padding:14px 16px; border-radius:var(--pill); background:var(--surface); border:1px solid var(--line); text-decoration:none; transition:transform .4s var(--ease), border-color .3s; }
.brand-chip:hover { transform:translateY(-2px); border-color:var(--peri); }
.brand-chip .logo-box { width:38px; height:38px; }
.brand-chip b { display:block; font-weight:500; color:var(--ink-strong); font-size:15px; }
.brand-chip small { color:var(--ink-muted); font-size:12px; }

.sec-team { background:var(--deep); color:var(--on-deep); }
.sec-team .sec-head h2 { color:var(--on-deep); }
.sec-team .sec-head p { color:var(--on-deep-muted); }
.sec-team .person-box { background:rgba(255,255,255,.06); border-color:rgba(255,255,255,.14); }
.sec-team .person-box h3, .sec-team .person-box h3 a, .sec-team .person-box p, .sec-team .person-box .verified { color:var(--on-deep); }
.sec-team .person-box small, .sec-team .person-box .role { color:var(--on-deep-muted); }

.sec-guides .pcard { background:linear-gradient(180deg, var(--surface), var(--bg)); }
.sec-videos .video-card { border-color:var(--mist); }
@media (max-width: 640px) {
  .trust-grid { grid-template-columns:1fr; }
  .brand-strip { grid-template-columns:1fr 1fr; }
}
